/*
 * All rights Reserved, Designed By DataDriver
 * Copyright:    DataDriver.Inc
 * Company:      Zhuo Wo Infomation Technology (ShangHai) CO.LTD
 */
package com.sun.controller;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class OrderController {


    /**
     * 使用Hystrix实现服务的熔断和限流
     * hystrix通过线程池的方式来管理微服务的调用，它默认是一个线程池（大小10个） 管理你的所有微服务，你可以给某个微服务开辟新的线程池：
     * hystrix限流就是限制你某个微服务的使用量（可用线程数、信号量）
     *
     *
     * threadPoolKey 是线程池唯一标识， hystrix 会使用该标识来计数，看线程占用是否超过了， 超过了就会直接降级该次调用；
     *
     * @return
     */
    @RequestMapping("/order")
    @HystrixCommand(
            fallbackMethod = "fallback",
            threadPoolKey = "goods",
            threadPoolProperties = {@HystrixProperty(name = "coreSize", value = "2"),
                    @HystrixProperty(name = "maxQueueSize", value = "1")})
    public String findOrderList() {
        int a = 10 / 0;
        return "订单列表为空";
    }


    public String fallback() {
        return "服务异常，进行服务降级处理！";
    }
}
